/**
 * Created by Administrator on 2018/4/15 0015.
 */
import java.*;
import java.util.*;
public class ArithmeticFunc {
        private String result;
        public void calc(String s){
            if(s.indexOf("+")>-1){
                int i=s.indexOf("+");
                if(s.indexOf("+",i+1)==i+1){
                    throw new IllegalArgumentException("Input error! Don't like 1++1");//格式错误时抛出异常
                }else{
                    add(s);
                }
            }
            if(s.indexOf("-")>-1){
                int i=s.indexOf("-");
                if(s.indexOf("-",i+1)==i+1){
                    throw new IllegalArgumentException("Input error! Don't like 1--1");//格式错误时抛出异常
                }else{
                    substract(s);
                }

            }
            if(s.indexOf("*")>-1){
                int i=s.indexOf("*");
                if(s.indexOf("*",i+1)==i+1){
                    throw new IllegalArgumentException("Input error! Don't like 1**1");//格式错误时抛出异常
                }else{
                    multiply(s);
                }
            }
            if(s.indexOf("÷")>-1){
                int i=s.indexOf("÷");
                if(s.indexOf("÷",i+1)==i+1){
                    throw new IllegalArgumentException("Input error! Don't like 1÷÷1");//格式错误时抛出异常
                }else{
                    divide(s);
                }
            }
            if(s.indexOf("^")>-1){
                int i=s.indexOf("^");
                if(s.indexOf("^",i+1)==i+1){
                    throw new IllegalArgumentException("Input error! Don't like 1^^1");//格式错误时抛出异常
                }else{
                    pow(s);
                }
            }
            if(s.indexOf("√")>-1){
                int i=s.indexOf("√");
                if(s.indexOf("{",i+1)==i+1){
                    throw new IllegalArgumentException("Input error! Don't like 1√√1");//格式错误时抛出异常
                }else{
                    sqrt(s);
                }
            }
            System.out.println(getResult());
        }

        public void sqrt(String s)
        {	int i1=s.indexOf("√")+1;
            String str=s.substring(i1);
            if(Integer.parseInt(str)>=0)
            {
                double a=Integer.parseInt(str);
                result = Math.sqrt(a) +"";
            }
            else{
                throw new IllegalArgumentException("overrun!");//数值范围超出时抛出异常
            }

        }

        public void pow(String s)
        {
            String[] str=s.split("\\^");
            if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//分数
            {
                String[] str1=str[0].split("\\/");
                String[] str2=str[1].split("\\/");
                if(Integer.parseInt(str1[1]) != 0)//分母不为零
                {
                    int a1=Integer.parseInt(str1[0]);
                    int a2=Integer.parseInt(str1[1]);
                    int b=Integer.parseInt(str[1]);
                    double r1=Math.pow(a1, b);
                    double r2=Math.pow(a2, b);
                    result =simplefraction((int)r1,(int)r2);
                }else{
                    throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
                }
            }
            else{
                if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)

                {int a=Integer.parseInt(str[0]);
                    int b=Integer.parseInt(str[1]);
                    result = Math.pow(a,b) +"";

                }
                else{
                    throw new IllegalArgumentException("overrun!");//数值范围超出时抛出异常
                }
            }
        }
        public void add(String s)//加法
        {
            String[] str=s.split("\\+");
            if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//分数
            {
                String[] str1=str[0].split("[/]");
                String[] str2=str[1].split("[/]");
                if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//分母不为零
                {
                    result =simplefraction(((Integer.parseInt(str1[0])*Integer.parseInt(str2[1]))+(Integer.parseInt(str2[0])*Integer.parseInt(str1[1]))),(Integer.parseInt(str1[1])*Integer.parseInt(str2[1])));
                }else{
                    throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
                }
            }
            else{//整数
                if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
                {
                    result = Integer.parseInt(str[0])+Integer.parseInt(str[1])+"";
                }

                else{
                    throw new IllegalArgumentException("overrun!");}//数值范围超出时抛出异常
            }

        }

        public void substract(String s)//减法
        {
            String[] str=s.split("[-]");
            if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//分数
            {
                String[] str1=str[0].split("[/]");
                String[] str2=str[1].split("[/]");
                if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//分母不为零
                {
                    result =simplefraction(((Integer.parseInt(str1[0])*Integer.parseInt(str2[1]))-(Integer.parseInt(str2[0])*Integer.parseInt(str1[1]))),(Integer.parseInt(str1[1])*Integer.parseInt(str2[1])));
                }else{
                    throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
                }
            }
            else{//整数
                if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
                {
                    result = Integer.parseInt(str[0])-Integer.parseInt(str[1])+"";
                }

                else{
                    throw new IllegalArgumentException("overrun!");}//数值范围超出时抛出异常
            }
        }


        public void multiply(String s)//乘法
        {
            String[] str=s.split("[*]");
            if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//分数
            {
                String[] str1=str[0].split("[/]");
                String[] str2=str[1].split("[/]");
                if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//
                {
                    result =simplefraction(Integer.parseInt(str1[0])*Integer.parseInt(str2[0]),Integer.parseInt(str1[1])*Integer.parseInt(str2[1]));
                }else{
                    throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
                }

            }
            else{//整数
                if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
                {	            result = Integer.parseInt(str[0])*Integer.parseInt(str[1])+"";   }

                else{
                    throw new IllegalArgumentException("overrun!");}//数值范围超出时抛出异常

            }
        }


        public void divide(String s)//除法
        {
            String[] str=s.split("[÷]");

            if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//分数
            {
                String[] str1=str[0].split("[/]");
                String[] str2=str[1].split("[/]");
                if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//分母不为零
                {
                    result =simplefraction(Integer.parseInt(str1[0])*Integer.parseInt(str2[1]),Integer.parseInt(str1[1])*Integer.parseInt(str2[0]));
                }else{
                    throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
                }

            }
            else{
                if(Integer.parseInt(str[1]) != 0){//整数
                    if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
                    {
                        result = Integer.parseInt(str[0])/Integer.parseInt(str[1])+"";
                    }

                    else{
                        throw new IllegalArgumentException("overrun!");}

                }else {

                    throw new IllegalArgumentException("Divisor cannot be zero!");   //除数为零时抛出异常
                }
            }
        }

        public String getResult()
        {
            return result;
        }


        public static int GCD(int m, int n) {//递归法求最大公约数
            if(m % n == 0){
                return n;
            }else{
                while(m != n){
                    if(m > n)m = m - n;
                    else n = n - m;
                }
            }
            return m;
        }
        public static int LCM(int m, int n){//求最小公倍数
            return m * n / GCD(m,n);
        }

        static String simplefraction(int m, int n){ //化简分数
            String s;
            int num = GCD(m, n);
            m = m / num;
            n = n / num;
            if (n == 1) {
                s = m + "";
            } else {
                s = m + "" + "/" + n + "";
            }
            return s;
        }

}
